// Typescript 还提供了一些功能性，帮助性的类型，这些类型，大家在 js 的世界是看不到的，这些类型叫做 utility types.
// 提供一些简洁明快而且非常方便的功能。-高级辅助类

// Partial  将传入的 T 类型所有属性置为可选
// Required 让所有属性都变成必选的
// Pick     从 T 类型选择一组属性构造新的类型   
// Omit     删除 T 类型中与 K 的所有联合类型成员有交集的键构造一个新类型


interface  UserInfo {
    username:string
    age:number
    password:string
    email:string
}

// 类型别名  

type  PartialUser = Partial<UserInfo> 

// 等价于


// interface PartialUser{
//     username?:string
//     age?:number
//     password?:string
//     email?:string
// }

let p1:PartialUser = {
    username:"king",
    email:"apple@126.com"
}



interface Per1{
    name?:string|undefined
    age?:number|undefined
    email?:string|undefined
}

type RequiredPer1 = Required<Per1>

// RequiredPer1等价于
// interface RequiredPer1{
//     name:string|undefined
//     age:number|undefined
//     email:string|undefined
// }


let  r1:RequiredPer1 = {
    name: "mary",
    age: 18,
    email: "mary@163.com"
}


interface  UU{
    name:string
    age:number
    email:string
    id:string
    gender:string
    hoby: string
}


type PickUU = Pick<UU,"age" | "hoby" | "name">

let pu:PickUU = {
    age: 20,
    name: "jack",
    hoby: "唱歌"
}

type OmitUU = Omit<UU,"id" | "age" | "email">
let ou:OmitUU = {
    name: "jeery",
    hoby: "跳舞",
    gender: "女"
}

